<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
  <script type="text/javascript" language="javascript">
    var idTmr;

    function getExplorer() {
      var explorer = window.navigator.userAgent.toLowerCase();
      if (explorer.indexOf("MSIE") >= 0 || explorer.indexOf("rv:11") > -1) { // ie
        return 'ie';
      } else if (explorer.indexOf("Firefox") >= 0) { // firefox
        return 'Firefox';
      } else if (explorer.indexOf("Chrome") >= 0) { // Chrome
        return 'Chrome';
      } else if (explorer.indexOf("Opera") >= 0) { // Opera
        return 'Opera';
      } else if (explorer.indexOf("Safari") >= 0) { // Safari
        return 'Safari';
      }
    }
    // 整个表格拷贝到EXCEL中
    function onExport(tableid) {
      if (getExplorer() == 'ie') {
        var curTbl = document.getElementById(tableid);
        var oXL = new ActiveXObject("Excel.Application");

        // 创建AX对象excel
        var oWB = oXL.Workbooks.Add();
        // 获取workbook对象
        var xlsheet = oWB.Worksheets(1);
        // 激活当前sheet
        var sel = document.body.createTextRange();
        sel.moveToElementText(curTbl);
        // 把表格中的内容移到TextRange中
        sel.select;
        // 全选TextRange中内容
        sel.execCommand("Copy");
        // 复制TextRange中内容
        xlsheet.Paste();
        // 粘贴到活动的EXCEL中
        oXL.Visible = true;
        // 设置excel可见属性

        try {
          var fname = oXL.Application.GetSaveAsFilename("Excel.xls", "Excel Spreadsheets (*.xls), *.xls");
        } catch (e) {
          print("Nested catch caught " + e);
        } finally {
          oWB.SaveAs(fname);
          oWB.Close(savechanges = false);
          // xls.visible = false;
          oXL.Quit();
          oXL = null;
          // 结束excel进程，退出完成
          idTmr = window.setInterval("Cleanup();", 1);
        }
      } else {
        tableToExcel('ta')
      }
    }

    function Cleanup() {
      window.clearInterval(idTmr);
      CollectGarbage();
    }
    var tableToExcel = (function () {
      var uri = 'data:application/vnd.ms-excel;base64,',
        template =
        '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>',
        base64 = function (s) {
          return window.btoa(unescape(encodeURIComponent(s)))
        },
        format = function (s, c) {
          return s.replace(/{(\w+)}/g,
            function (m, p) {
              return c[p];
            })
        }
      return function (table, name) {
        if (!table.nodeType) table = document.getElementById(table)
        var ctx = {
          worksheet: name || 'Worksheet',
          table: table.innerHTML
        }
        window.location.href = uri + base64(format(template, ctx))
      }
    })()
  </script>
</head>

<body>
  <p>JavaScript导出Excel表格</p>
  <table id="ta">
    <tr>
      <td>1</td>
      <td>admin</td>
      <td>23</td>
      <td>程序员</td>
      <td>天津</td>
      <td>admin@kali.com</td>
    </tr>
    <tr>
      <td>2</td>
      <td>guest</td>
      <td>23</td>
      <td>测试员</td>
      <td>北京</td>
      <td>guest@kali.com</td>
    </tr>
  </table>
  <input id="Button1" type="button" value="导出EXCEL" onclick="onExport('ta')" />
</body>

</html>